package br.com.itc.componentes
{
	import br.com.itc.componentes.botoes.Botao;
	
	import flash.display.DisplayObject;
	import flash.events.MouseEvent;
	
	import mx.controls.Alert;
	import mx.core.Application;
	import mx.core.IFlexDisplayObject;
	import mx.events.FlexEvent;
	import mx.managers.IFocusManagerComponent;
	import mx.managers.IFocusManagerContainer;
	import mx.managers.PopUpManager;
	
	public class Alerta extends AlertaView
	{
		
		public var alerta:Alert;
		
		[Embed(source="imagens/alerta/ok.png")]
      	private var iconOK:Class;
        
        [Embed(source="imagens/alerta/delete.png")]
      	private var iconDelete:Class;
          
        [Embed(source="imagens/alerta/error.png")]
        private var iconError:Class;
        
        [Embed(source="imagens/alerta/ajuda.png")]
        private var iconAjuda:Class;
          
        [Embed(source="imagens/alerta/informacao.png")]
      	private var iconInfo:Class;
        
       	[Embed(source="imagens/alerta/privado.png")]
        private var iconPrivado:Class;
		
		public static var TIPO_ALERTA: Number = 1;
		public static var TIPO_INFORMACAO: Number = 2;
		public static var TIPO_PERGUNTA: Number = 3;
		public static var TIPO_OK: Number = 4;
		public static var TIPO_PRIVADO: Number = 5;
		public static var TIPO_DELETE: Number = 6;

		public static var ERRO_CAMPO_OBRIGATORIO: String = "Campo obrigatório não preenchido";
		
		private var _mensagemAviso: String;
		private var _titulo: String;
		private var _tipo: Number;
		private var _function1: Function;
		private var _function2: Function;
		
		private var _campoFoco: IFocusManagerComponent;
		
		private var _botaoOK: Botao;
		private var _botaoSIM: Botao;
		private var _botaoNAO: Botao;
		
		public function Alerta()
		{
			this.addEventListener(FlexEvent.CREATION_COMPLETE, init);
		}
		
		private function init(event: FlexEvent): void {
			this.lblMensagemAlerta.text = mensagemAviso;
			this.title = titulo;
			switch(tipo) {
				case TIPO_ALERTA: {
					_botaoOK = new Botao;
					imagem.source = iconError; 
					_botaoOK.addEventListener(MouseEvent.CLICK, clickOK);
					if (function1 != null) {
						_botaoOK.addEventListener(MouseEvent.CLICK, function1);
					}
					_botaoOK.label = "OK";
					this.barraBotoes.addChild(_botaoOK);
					break;
				}
				case TIPO_INFORMACAO: {
					_botaoOK = new Botao;
					imagem.source = iconInfo; 
					_botaoOK.addEventListener(MouseEvent.CLICK, clickOK);
					if (function1 != null) {
						_botaoOK.addEventListener(MouseEvent.CLICK, function1);
					}
					_botaoOK.label = "OK";
					this.barraBotoes.addChild(_botaoOK);
					break;
				}
				case TIPO_OK: {
					_botaoOK = new Botao;
					imagem.source = iconOK; 
					_botaoOK.addEventListener(MouseEvent.CLICK, clickOK);
					if (function1 != null) {
						_botaoOK.addEventListener(MouseEvent.CLICK, function1);
					}
					_botaoOK.label = "OK";
					this.barraBotoes.addChild(_botaoOK);
					break;
				}
				case TIPO_PRIVADO: {
					_botaoOK = new Botao;
					imagem.source = iconPrivado; 
					_botaoOK.addEventListener(MouseEvent.CLICK, clickOK);
					if (function1 != null) {
						_botaoOK.addEventListener(MouseEvent.CLICK, function1);
					}
					_botaoOK.label = "OK";
					this.barraBotoes.addChild(_botaoOK);
					break;
				}
				case TIPO_DELETE: {
					_botaoOK = new Botao;
					imagem.source = iconDelete; 
					_botaoOK.addEventListener(MouseEvent.CLICK, clickOK);
					if (function1 != null) {
						_botaoOK.addEventListener(MouseEvent.CLICK, function1);
					}
					_botaoOK.label = "OK";
					this.barraBotoes.addChild(_botaoOK);
					break;
				}
				case TIPO_PERGUNTA: {
					_botaoSIM = new Botao;
					imagem.source = iconAjuda;
					_botaoSIM.addEventListener(MouseEvent.CLICK, clickOK);
					if (function1 != null) {
						_botaoSIM.addEventListener(MouseEvent.CLICK, function1);
					}
					_botaoSIM.label = "SIM";
					this.barraBotoes.addChild(_botaoSIM);
					
					_botaoNAO = new Botao;
					_botaoNAO.addEventListener(MouseEvent.CLICK, clickOK);
					if (function2 != null) {
						_botaoNAO.addEventListener(MouseEvent.CLICK, function2);
					}
					_botaoNAO.label = "NÃO";
					this.barraBotoes.addChild(_botaoNAO);
					break;
				}
			}
		} 
		
		private function clickOK(event: MouseEvent): void {
			PopUpManager.removePopUp(this);
			
			if (systemManager.popUpChildren.numChildren <= 1) {
				systemManager.activate(Application.application as IFocusManagerContainer);
			}
			
			if (campoFoco != null) {
				setarCampoFoco();
			}
		}
		
		private function setarCampoFoco(): void {
			campoFoco.setFocus();
			focusManager.showFocus();
		}
		
		public override function get titulo(): String {
			return _titulo;
		}
		public override function set titulo(titulo: String): void {
			this._titulo = titulo;
		}
		
		public function get campoFoco(): IFocusManagerComponent {
			return _campoFoco;
		}
		
		public function set campoFoco(campoFoco: IFocusManagerComponent): void {
			this._campoFoco = campoFoco;
		}
		
		public function get mensagemAviso(): String {
			return this._mensagemAviso;
		}
		
		public function set mensagemAviso(mensagemAviso: String): void {
			this._mensagemAviso = mensagemAviso;
		}
		
		public function get tipo(): Number {
			return this._tipo;
		}
		
		public function set tipo(tipo: Number): void {
			this._tipo = tipo;
		}
		
		public function get function1(): Function {
			return this._function1;
		}
		
		public function set function1(function1: Function): void {
			this._function1 = function1;
		}

		public function get function2(): Function {
			return this._function2;
		}
		
		public function set function2(function2: Function): void {
			this._function2 = function2;
		}
		
		public static function show(mensagemAviso: String, titulo: String, tipo: Number = 1, campoFoco: Object = null, funcao1: Function = null, funcao2: Function = null): void {
			var classe: Class = Alerta;
			var popUp: IFlexDisplayObject = PopUpManager.createPopUp(Application.application as DisplayObject, classe, true);
			var janelaAlerta: Alerta = popUp as Alerta;
			janelaAlerta.mensagemAviso = mensagemAviso;
			janelaAlerta.titulo = titulo;
			janelaAlerta.tipo = tipo;
			janelaAlerta.function1 = funcao1;
			janelaAlerta.function2 = funcao2;
			janelaAlerta.campoFoco = campoFoco as IFocusManagerComponent;
			PopUpManager.centerPopUp(janelaAlerta);
		}
		
		public static function showCampoObrigatorio(campoFoco: Object = null, mensagemAviso: String = null, funcao1: Function = null): void {
			var classe: Class = Alerta;
			var popUp: IFlexDisplayObject = PopUpManager.createPopUp(Application.application as DisplayObject, classe, true);
			var janelaAlerta: Alerta = popUp as Alerta;
			
			if (mensagemAviso == null) {
				mensagemAviso = ERRO_CAMPO_OBRIGATORIO;
			}
			
			janelaAlerta.mensagemAviso = mensagemAviso;
			janelaAlerta.titulo = "Erro!";
			janelaAlerta.tipo = TIPO_ALERTA;
			janelaAlerta.function1 = funcao1;
			janelaAlerta.campoFoco = campoFoco as IFocusManagerComponent;
			PopUpManager.centerPopUp(janelaAlerta);
		}
	}
}